// import 循环主类 from '../main'
import { 每秒郭氏帧 } from '@/components/CycleSimulator/constant'
import 循环模拟技能基础数据 from '../../../constant/skill'
import 有CD技能通用类 from '../../通用类/有CD技能通用类'

class 游风飘踪 extends 有CD技能通用类 {
  static 技能数据 = 循环模拟技能基础数据?.find((item) => item.技能名称 === '游')

  constructor(模拟循环) {
    super(模拟循环)

    // 因为横断技能充能信息受奇穴影响，这里做覆盖
    游风飘踪.技能数据 = 模拟循环?.技能基础数据?.find((item) => item.技能名称 === '游')

    this.初始化技能运行数据(游风飘踪.技能数据)
  }

  命中() {
    if (this.模拟循环.校验奇穴是否存在?.('流岚')) {
      this.模拟循环.添加buff?.({ 名称: '身形', 对象: '自身', 新增层数: 3 })
    }
  }

  // 游风在没有被控制状态释放后回返还7秒冷却，这里做特殊处理
  技能释放后更新运行数据() {
    const 最大充能层数 = 游风飘踪.技能数据?.最大充能层数 || 1
    const 是否为充满后第一次释放 = this?.技能运行数据?.当前层数 === 最大充能层数

    const 当前时间 = this?.模拟循环?.当前时间 || 0
    function 获取帧数(秒) {
      return 每秒郭氏帧 * 秒
    }
    const 原充能时间 = this?.技能运行数据?.计划下次充能时间点 || 0
    const 原充能时间返还7秒 = Math.max(原充能时间 - 获取帧数(7), 0)
    const 本次释放后返还是否会导致充能 = 原充能时间返还7秒 <= 当前时间 && 原充能时间 > 当前时间

    const 释放后层数 =
      本次释放后返还是否会导致充能 && !是否为充满后第一次释放
        ? this?.技能运行数据?.当前层数
        : this?.技能运行数据?.当前层数 - 1

    const 当前时间开始计算充能时间点 = 当前时间 + (游风飘踪.技能数据?.技能CD || 0) - 获取帧数(7)

    if (是否为充满后第一次释放) {
      this?.更新技能运行数据({
        当前层数: 释放后层数,
        计划下次充能时间点: 当前时间开始计算充能时间点,
      })
    } else {
      if (释放后层数 <= 0) {
        const 计算充能时间 =
          // 已经充能好了
          原充能时间返还7秒 <= 当前时间 ? 当前时间开始计算充能时间点 : 原充能时间返还7秒
        this?.更新技能运行数据({
          当前层数: 释放后层数,
          计划下次充能时间点: 计算充能时间,
        })
      } else {
        if (当前时间开始计算充能时间点) {
          this?.更新技能运行数据({
            当前层数: 释放后层数,
            计划下次充能时间点: 原充能时间 + (游风飘踪.技能数据?.技能CD || 0) - 获取帧数(7),
          })
        } else {
          this?.更新技能运行数据({
            当前层数: 释放后层数,
          })
        }
      }
    }
  }
}

export default 游风飘踪

export const 游风飘踪类型 = typeof 游风飘踪
